#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>

#ifndef _MySTRING_H_
#define _MySTRING_H_

#define INITSTR(s)          MyStr s;InitString(&s);
#define INSERTSTR(s,str)    INITSTR(s);InsertString(&s,str);


struct StdMyString
{
    char *string;
    int size;//申请的堆上空间
    int len;//实际的字符串长度
};

typedef struct StdMyString MyStr;

//结构体的前置声明
struct StdStringList;
typedef struct StdStringList MyStrList;

void InitString(MyStr *s);
bool InsertString(MyStr *s, const char * str);
bool InsertByIndex(MyStr *s,const char * str, int index);
bool InsertChar(MyStr *s, char c,int index);
bool RemoveString(MyStr *s,const char * str);
bool IsContains(MyStr *s,const char * str);
bool IsEqual(MyStr *s, const char *str);
bool IsEqualCaseInsensitive(MyStr *s,const char *str);
//全变大写
MyStr ToUpper(const char *str);
MyStr ToLower(const char *str);
int StringToInt(MyStr *s);
double StringToDouble(MyStr *s);
MyStr CopyString(const MyStr *s);
MyStr GetString(const char *s);
//字符串切割
MyStrList Split(const char *src,const char * delim);


void ClearString(MyStr *s);

struct StdStringList
{
    MyStr *stringList;
    int len;//长度
    int size;//容量
};


void InitMyStringList(MyStrList *list);
bool InsertTail(MyStrList *list,const char * str);

//按位置删除字符串
bool RemoveMyStrByIndex(MyStrList *list,int index);
//
bool RemoveMyString(MyStrList *list,const char *str);
void DisplayStringList(MyStrList *list);
void ClearMyStringList(MyStrList * list);

#endif